package org.immutables.mongo.fixture;
import com.github.fakemongo.Fongo;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapterFactory;
import com.mongodb.DB;
import org.immutables.mongo.repository.RepositorySetup;
import org.junit.rules.ExternalResource;
import java.util.ServiceLoader;
import java.util.concurrent.Executors;
/**
* JUnit rule which allows tests to access {@link RepositorySetup} and in-memory database (fongo).
*/
public class MongoContext extends ExternalResource {
private final RepositorySetup setup;
private final DB database;
public MongoContext() {
this.database = new Fongo("FakeMongo").getDB("testDB");
ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
this.setup = RepositorySetup.builder()
.gson(createGson())
.executor(executor)
.database(database)
.build();
}
public DB database() {
return database;
}
public RepositorySetup setup() {
return setup;
}
private static com.google.gson.Gson createGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
for (TypeAdapterFactory factory : ServiceLoader.load(TypeAdapterFactory.class)) {
gsonBuilder.registerTypeAdapterFactory(factory);
}
return gsonBuilder.create();
}
}